load("@rules_cc//cc:cc_library.bzl", "cc_library")

package(default_visibility = ["//visibility:public"])

cc_library(
    name = "boost.spirit",
    hdrs = glob(
        [
            "include/**/*.hpp",
            "include/**/*.ipp",
        ],
        exclude = [
            "include/boost/spirit/home/classic/**/impl/*.ipp",
            "include/boost/spirit/home/classic/**/*_fwd.hpp",
            "include/boost/spirit/home/classic/core/composite/*.hpp",
            "include/boost/spirit/home/classic/core/non_terminal/parser_context.hpp",
            "include/boost/spirit/home/classic/core/non_terminal/parser_id.hpp",
            "include/boost/spirit/home/classic/core/scanner/skipper.hpp",
            "include/boost/spirit/home/classic/debug/*.hpp",
            "include/boost/spirit/home/classic/meta.hpp",
            "include/boost/spirit/home/classic/meta/fundamental.hpp",
            "include/boost/spirit/home/classic/meta/traverse.hpp",
            "include/boost/spirit/home/classic/phoenix/special_ops.hpp",
            "include/boost/spirit/home/classic/tree/parse_tree_fwd.hpp",
            "include/boost/spirit/home/classic/tree/tree_to_xml.hpp",
            "include/boost/spirit/home/classic/utility/lists.hpp",
            "include/boost/spirit/home/classic/utility/scoped_lock.hpp",
            "include/boost/spirit/home/karma/nonterminal/detail/*.hpp",
            "include/boost/spirit/home/karma/nonterminal/simple_trace.hpp",
            "include/boost/spirit/home/karma/numeric/detail/*.hpp",
            "include/boost/spirit/home/lex/argument.hpp",
            "include/boost/spirit/home/lex/argument_phoenix.hpp",
            "include/boost/spirit/home/lex/lexer/action.hpp",
            "include/boost/spirit/home/lex/lexer/lexertl/functor.hpp",
            "include/boost/spirit/home/lex/lexer/lexertl/lexer.hpp",
            "include/boost/spirit/home/lex/lexer/support_functions.hpp",
            "include/boost/spirit/home/lex/qi/in_state.hpp",
            "include/boost/spirit/home/qi/copy.hpp",
            "include/boost/spirit/home/qi/nonterminal/detail/*.hpp",
            "include/boost/spirit/home/support/char_set/range_run_impl.hpp",
            "include/boost/spirit/home/support/detail/*.hpp",
            "include/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_helper.hpp",
            "include/boost/spirit/home/support/lazy.hpp",
            "include/boost/spirit/home/support/modify.hpp",
            "include/boost/spirit/home/support/utree/detail/*.hpp",
            "include/boost/spirit/home/x3.hpp",
            "include/boost/spirit/home/x3/auxiliary/guard.hpp",
            "include/boost/spirit/home/x3/core/action.hpp",
            "include/boost/spirit/home/x3/core/detail/parse_into_container.hpp",
            "include/boost/spirit/home/x3/core/proxy.hpp",
            "include/boost/spirit/home/x3/directive.hpp",
            "include/boost/spirit/home/x3/directive/expect.hpp",
            "include/boost/spirit/home/x3/directive/repeat.hpp",
            "include/boost/spirit/home/x3/nonterminal.hpp",
            "include/boost/spirit/home/x3/nonterminal/detail/rule.hpp",
            "include/boost/spirit/home/x3/nonterminal/rule.hpp",
            "include/boost/spirit/home/x3/numeric.hpp",
            "include/boost/spirit/home/x3/numeric/bool.hpp",
            "include/boost/spirit/home/x3/operator.hpp",
            "include/boost/spirit/home/x3/operator/detail/alternative.hpp",
            "include/boost/spirit/home/x3/operator/detail/sequence.hpp",
            "include/boost/spirit/home/x3/operator/kleene.hpp",
            "include/boost/spirit/home/x3/operator/list.hpp",
            "include/boost/spirit/home/x3/operator/optional.hpp",
            "include/boost/spirit/home/x3/operator/plus.hpp",
            "include/boost/spirit/home/x3/operator/sequence.hpp",
            "include/boost/spirit/home/x3/string.hpp",
            "include/boost/spirit/home/x3/string/literal_string.hpp",
            "include/boost/spirit/home/x3/string/tst_map.hpp",
            "include/boost/spirit/home/x3/support/numeric_utils/extract_real.hpp",
            "include/boost/spirit/home/x3/support/numeric_utils/pow10.hpp",
            "include/boost/spirit/home/x3/support/traits/is_substitute.hpp",
            "include/boost/spirit/home/x3/support/traits/variant_find_substitute.hpp",
            "include/boost/spirit/home/x3/support/traits/variant_has_substitute.hpp",
            "include/boost/spirit/home/x3/support/utility/annotate_on_success.hpp",
            "include/boost/spirit/home/x3/support/utility/error_reporting.hpp",
            "include/boost/spirit/home/x3/support/utility/is_callable.hpp",
            "include/boost/spirit/include/*_fwd.hpp",
            "include/boost/spirit/include/classic_debug_node.hpp",
            "include/boost/spirit/include/classic_fundamental.hpp",
            "include/boost/spirit/include/classic_list.hpp",
            "include/boost/spirit/include/classic_lists.hpp",
            "include/boost/spirit/include/classic_minimal.hpp",
            "include/boost/spirit/include/classic_meta.hpp",
            "include/boost/spirit/include/classic_parser_context.hpp",
            "include/boost/spirit/include/classic_parser_id.hpp",
            "include/boost/spirit/include/classic_scoped_lock.hpp",
            "include/boost/spirit/include/classic_sequential_and.hpp",
            "include/boost/spirit/include/classic_skipper.hpp",
            "include/boost/spirit/include/classic_traverse.hpp",
            "include/boost/spirit/include/classic_tree_to_xml.hpp",
            "include/boost/spirit/include/classic_utility.hpp",
            "include/boost/spirit/include/phoenix1_special_ops.hpp",
            "include/boost/spirit/include/qi_copy.hpp",
            "include/boost/spirit/include/support_modify.hpp",
            "include/boost/spirit/repository/home/qi/operator/detail/keywords.hpp",
            "include/boost/spirit/repository/home/qi/primitive/iter_pos.hpp",
            "include/boost/spirit/repository/include/qi_iter_pos.hpp",
        ],
    ),
    features = [
        "parse_headers",
    ],
    includes = ["include"],
    textual_hdrs = [
        "include/boost/spirit/home/classic/core/non_terminal/parser_context.hpp",
        "include/boost/spirit/home/classic/core/non_terminal/parser_id.hpp",
        "include/boost/spirit/home/classic/meta.hpp",
        "include/boost/spirit/home/classic/meta/fundamental.hpp",
        "include/boost/spirit/home/classic/meta/traverse.hpp",
        "include/boost/spirit/home/classic/phoenix/special_ops.hpp",
        "include/boost/spirit/home/classic/tree/tree_to_xml.hpp",
        "include/boost/spirit/home/classic/utility/lists.hpp",
        "include/boost/spirit/home/classic/utility/scoped_lock.hpp",
        "include/boost/spirit/home/karma/nonterminal/simple_trace.hpp",
        "include/boost/spirit/home/lex/argument.hpp",
        "include/boost/spirit/home/lex/argument_phoenix.hpp",
        "include/boost/spirit/home/lex/lexer/action.hpp",
        "include/boost/spirit/home/lex/lexer/lexertl/functor.hpp",
        "include/boost/spirit/home/lex/lexer/lexertl/lexer.hpp",
        "include/boost/spirit/home/lex/lexer/support_functions.hpp",
        "include/boost/spirit/home/lex/qi/in_state.hpp",
        "include/boost/spirit/home/qi/copy.hpp",
        "include/boost/spirit/home/support/char_set/range_run_impl.hpp",
        "include/boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_helper.hpp",
        "include/boost/spirit/home/support/lazy.hpp",
        "include/boost/spirit/home/support/modify.hpp",
        "include/boost/spirit/home/x3.hpp",
        "include/boost/spirit/home/x3/auxiliary/guard.hpp",
        "include/boost/spirit/home/x3/core/action.hpp",
        "include/boost/spirit/home/x3/core/detail/parse_into_container.hpp",
        "include/boost/spirit/home/x3/core/proxy.hpp",
        "include/boost/spirit/home/x3/directive.hpp",
        "include/boost/spirit/home/x3/directive/expect.hpp",
        "include/boost/spirit/home/x3/directive/repeat.hpp",
        "include/boost/spirit/home/x3/nonterminal.hpp",
        "include/boost/spirit/home/x3/nonterminal/rule.hpp",
        "include/boost/spirit/home/x3/numeric.hpp",
        "include/boost/spirit/home/x3/numeric/bool.hpp",
        "include/boost/spirit/home/x3/operator.hpp",
        "include/boost/spirit/home/x3/operator/detail/alternative.hpp",
        "include/boost/spirit/home/x3/operator/detail/sequence.hpp",
        "include/boost/spirit/home/x3/operator/kleene.hpp",
        "include/boost/spirit/home/x3/operator/list.hpp",
        "include/boost/spirit/home/x3/operator/optional.hpp",
        "include/boost/spirit/home/x3/operator/plus.hpp",
        "include/boost/spirit/home/x3/operator/sequence.hpp",
        "include/boost/spirit/home/x3/string.hpp",
        "include/boost/spirit/home/x3/string/literal_string.hpp",
        "include/boost/spirit/home/x3/string/tst_map.hpp",
        "include/boost/spirit/home/x3/support/numeric_utils/extract_real.hpp",
        "include/boost/spirit/home/x3/support/numeric_utils/pow10.hpp",
        "include/boost/spirit/home/x3/support/traits/is_substitute.hpp",
        "include/boost/spirit/home/x3/support/traits/variant_find_substitute.hpp",
        "include/boost/spirit/home/x3/support/traits/variant_has_substitute.hpp",
        "include/boost/spirit/home/x3/support/utility/annotate_on_success.hpp",
        "include/boost/spirit/home/x3/support/utility/error_reporting.hpp",
        "include/boost/spirit/home/x3/support/utility/is_callable.hpp",
        "include/boost/spirit/include/classic_debug_node.hpp",
        "include/boost/spirit/include/classic_fundamental.hpp",
        "include/boost/spirit/include/classic_list.hpp",
        "include/boost/spirit/include/classic_lists.hpp",
        "include/boost/spirit/include/classic_minimal.hpp",
        "include/boost/spirit/include/classic_meta.hpp",
        "include/boost/spirit/include/classic_parser_context.hpp",
        "include/boost/spirit/include/classic_parser_id.hpp",
        "include/boost/spirit/include/classic_scoped_lock.hpp",
        "include/boost/spirit/include/classic_sequential_and.hpp",
        "include/boost/spirit/include/classic_skipper.hpp",
        "include/boost/spirit/include/classic_traverse.hpp",
        "include/boost/spirit/include/classic_tree_to_xml.hpp",
        "include/boost/spirit/include/classic_utility.hpp",
        "include/boost/spirit/include/phoenix1_special_ops.hpp",
        "include/boost/spirit/include/qi_copy.hpp",
        "include/boost/spirit/include/support_modify.hpp",
        "include/boost/spirit/repository/home/qi/operator/detail/keywords.hpp",
        "include/boost/spirit/repository/home/qi/primitive/iter_pos.hpp",
        "include/boost/spirit/repository/include/qi_iter_pos.hpp",
        "include/boost/spirit/home/classic/core/scanner/skipper.hpp",
    ] + glob([
        "include/boost/spirit/include/*_fwd.hpp",
        "include/boost/spirit/home/qi/nonterminal/detail/*.hpp",
        "include/boost/spirit/home/support/detail/*.hpp",
        "include/boost/spirit/home/support/utree/detail/*.hpp",
        "include/boost/spirit/home/classic/**/impl/*.ipp",
        "include/boost/spirit/home/classic/**/*_fwd.hpp",
        "include/boost/spirit/home/classic/core/composite/*.hpp",
        "include/boost/spirit/home/classic/debug/*.hpp",
        "include/boost/spirit/home/karma/nonterminal/detail/*.hpp",
        "include/boost/spirit/home/karma/numeric/detail/*.hpp",
    ]),
    deps = [
        "@boost.array",
        "@boost.assert",
        "@boost.config",
        "@boost.core",
        "@boost.endian",
        "@boost.function",
        "@boost.function_types",
        "@boost.fusion",
        "@boost.integer",
        "@boost.io",
        "@boost.iterator",
        "@boost.move",
        "@boost.mpl",
        "@boost.optional",
        "@boost.phoenix",
        "@boost.pool",
        "@boost.preprocessor",
        "@boost.proto",
        "@boost.range",
        "@boost.regex",
        "@boost.smart_ptr",
        "@boost.static_assert",
        "@boost.thread",
        "@boost.throw_exception",
        "@boost.type_traits",
        "@boost.typeof",
        "@boost.unordered",
        "@boost.utility",
        "@boost.variant",
    ],
)
